# -*- coding: utf-8 -*-
# 问题描述
# 给出一个 32 位的有符号整数，你需要将这个整数中每位上的数字进行反转

# 示例 1:
# 输入: 123
# 输出: 321

# 示例 2:
# 输入: -123
# 输出: -321

# 示例 3:
# 输入: 120
# 输出: 21

# 注意:
# 假设我们的环境只能存储得下 32 位的有符号整数，则其数值范围为 [−2的31方,  2的31方 − 1]。请根据这个假设，如果反转后整数溢出那么就返回 0

# 一次过嘻嘻！！
class Solution(object):
    def reverse(self, x):
        """
        :type x: int
        :rtype: int
        """
        is_positive = x > 0 ;
        x = abs(x);

        rtn = 0;
        while x / 10 != 0:
            rtn = rtn * 10 + x % 10;
            x = x / 10;

        # 溢出判断
        last_value = x % 10;
        if last_value != 0 and rtn > 2**31 / 10:
            return 0;
        if last_value != 0 and rtn == 2**31 / 10:
            if is_positive and last_value > 7:
                return 0;
            elif not is_positive and last_value > 8:
                return 0;

        if is_positive:
            rtn = rtn * 10 + x % 10;
        else:
            rtn = -rtn * 10 - x % 10;

        return rtn;

t = Solution();
print t.reverse(1147483648);